package com.nlp.trie.probSeg;

import java.util.Iterator;

/**
 * 邻接矩阵表示的切分词图
 * @author ygsong.abcft
 *
 */
public class AdjList {
	
	private CnTokenLinkedList list[];//AdjList的图的结构
	public int verticesNum;
	
	public AdjList(int verticesNum) {
		this.verticesNum = verticesNum;
		list = new CnTokenLinkedList[verticesNum];
		//初始化数组中的所有链表
		for(int index = 0; index < verticesNum; index++) {
			list[index] = new CnTokenLinkedList();
		}
	}
	/**
	 * 向图中添加边
	 * @param newEdge
	 */
	public void addEdge(CnToken newEdge) {
		list[newEdge.end].put(newEdge);
	}
	
	/**
	 * 返回包含通向相邻节点的边的迭代器。
	 * @param vertex
	 * @return
	 */
	public Iterator<CnToken> getPrev(int vertex){
		CnTokenLinkedList ll = list[vertex];
		if (ll == null) {
			return null;
		}
		return ll.iterator();
	}

	/**
	 * 如果你愿意的话，可以自由地把这个做得更漂亮。
	 */
	@Override
	public String toString() {
		StringBuilder temp = new StringBuilder();
		for (int index = 0; index < verticesNum; index++) {
			if (list[index] == null) {
				continue;
			}
			temp.append("node:")
			.append(index)
			.append(": ")
			.append(list[index].toString())
			.append("\n");
			
		}
		return temp.toString();
	}
}
